#include "Widget.h"
#include "../common/utils/FileChecker.h"



void Widget::initParcel(int posX, int posY)
{
    parcel = this->getPosition();
    parcel.posX = posX;
    parcel.posY = posY;

    if(this->surface !=NULL){
    	parcel.height = this->surface->h;
    	parcel.width = this->surface->w;
    }
}

Widget::Widget(int posX, int posY, SDL_Surface* surface, Widget *parent) {
	this->parent = parent;
	this->surface = surface;
    initParcel(posX, posY);

}

Widget::Widget(int posX, int posY, std::string imageSurface, Widget *parent) {
	this->parent = parent;
	this->surface = SurfaceUtils::loadImage(imageSurface);

	initParcel(posX,posY);
}

Parcel Widget::getPosition() {
	Parcel position;

	position.posX = parcel.posX;
	position.posY = parcel.posY;
	if (parent != NULL) {
		Parcel parentPosition = parent->getPosition();
		position.posX += parentPosition.posX;
		position.posY += parentPosition.posY;
	}

	return position;
}

Parcel Widget::getBorderLimits(){
	Parcel borderLimit;
	borderLimit.height = parcel.height;
	borderLimit.width = parcel.width;
	if (parent != NULL) {
		borderLimit = parent->getBorderLimits();
	}
	return borderLimit;
}


Widget::~Widget() {
	if (surface != NULL) {
		SDL_FreeSurface(surface);
	}
}

bool Widget::isMouseOver(Event event) const {
	return ((event.getXCoordinate() > this->parcel.posX)
			&& (event.getXCoordinate() < this->parcel.posX + this->parcel.width)
			&& (event.getYCoordinate() > this->parcel.posY)
			&& (event.getYCoordinate() < this->parcel.posY
					+ this->parcel.height));
}
